package com.rent.common.util;

import java.util.Date;

/**
 * 日期工具类
 * 基于Hutool的DateUtil增强
 */
public class DateUtil {
    
    /**
     * 标准日期时间格式
     */
    public static final String PATTERN_DATETIME = "yyyy-MM-dd HH:mm:ss";
    
    /**
     * 标准日期格式
     */
    public static final String PATTERN_DATE = "yyyy-MM-dd";
    
    /**
     * 标准时间格式
     */
    public static final String PATTERN_TIME = "HH:mm:ss";
    
    /**
     * 格式化日期时间
     * 
     * @param date 日期
     * @return 格式化后的字符串（yyyy-MM-dd HH:mm:ss）
     */
    public static String formatDateTime(Date date) {
        return cn.hutool.core.date.DateUtil.format(date, PATTERN_DATETIME);
    }
    
    /**
     * 格式化日期
     * 
     * @param date 日期
     * @return 格式化后的字符串（yyyy-MM-dd）
     */
    public static String formatDate(Date date) {
        return cn.hutool.core.date.DateUtil.format(date, PATTERN_DATE);
    }
    
    /**
     * 格式化时间
     * 
     * @param date 日期
     * @return 格式化后的字符串（HH:mm:ss）
     */
    public static String formatTime(Date date) {
        return cn.hutool.core.date.DateUtil.format(date, PATTERN_TIME);
    }
    
    /**
     * 解析日期时间字符串
     * 
     * @param dateStr 日期时间字符串（yyyy-MM-dd HH:mm:ss）
     * @return Date对象
     */
    public static Date parseDateTime(String dateStr) {
        return cn.hutool.core.date.DateUtil.parse(dateStr, PATTERN_DATETIME);
    }
    
    /**
     * 解析日期字符串
     * 
     * @param dateStr 日期字符串（yyyy-MM-dd）
     * @return Date对象
     */
    public static Date parseDate(String dateStr) {
        return cn.hutool.core.date.DateUtil.parse(dateStr, PATTERN_DATE);
    }
    
    /**
     * 获取当前日期时间
     * 
     * @return Date对象
     */
    public static Date now() {
        return new Date();
    }
    
    /**
     * 获取当前日期时间字符串
     * 
     * @return 格式化后的字符串（yyyy-MM-dd HH:mm:ss）
     */
    public static String nowStr() {
        return formatDateTime(now());
    }
    
    /**
     * 计算两个日期之间的天数
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 天数
     */
    public static long betweenDays(Date startDate, Date endDate) {
        return cn.hutool.core.date.DateUtil.betweenDay(startDate, endDate, true);
    }
    
    /**
     * 增加天数
     * 
     * @param date 日期
     * @param days 天数
     * @return 新的日期
     */
    public static Date addDays(Date date, int days) {
        return cn.hutool.core.date.DateUtil.offsetDay(date, days);
    }
    
    /**
     * 增加小时
     * 
     * @param date 日期
     * @param hours 小时数
     * @return 新的日期
     */
    public static Date addHours(Date date, int hours) {
        return cn.hutool.core.date.DateUtil.offsetHour(date, hours);
    }
}

